#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <assert.h>
#include <string.h>

#define MAX 1024 //最多1024个字符
#define ARGC 64 //最多63个选项(除去换行带来的空格)
#define SPG " " //选项之间的分隔符


void debugprint(char* argv[])
{
    int i;
    for(i=0;argv[i];++i)
    {
        printf("%s",argv[i]);
    }
}

// char* getpwd()
// {
//     char* pwdcur = getenv("PWD");
//     if(pwdcur[1]=='\0') return pwdcur;
//     size_t len = strlen(pwdcur)-1;
//     while(pwdcur[len--] != '/') {}
//     return pwdcur+len+2;
// }

// //实现bash可以识别用户名和当前文件夹，存在一定bug
// int main()
// {
//     extern char* environ;
//     char* user = NULL;
//     char* current = NULL;
//     char str[MAX] = {0}; //存放字符
//     char *argv[ARGC] = {NULL};
//     while(1)
//     {

//         char admin = '$';
//         if(argv[0] == NULL || argv[0] == "su")
//         {
//             user = getenv("HOME")+1;
//             char* tail = strtok(user,"/");
//             tail = strtok(NULL,"/");
//             if(tail)
//             {
//                 user = tail;
//             }
//         }
//         if(strcmp(user,"root") == 0)
//         {
//             admin = '#';
//         }
//         char* hostname = getenv("HOSTNAME");
//         current = getpwd();
//         printf("[%s@%s %s]%c ",user,hostname,current,admin);
//         fflush(stdout);
//         char* s = fgets(str,sizeof(str),stdin);
//         assert(s);
//         str[strlen(str)-1]='\0';
//         (void*)s; // 保证在release方式发布的时候，因为去掉assert了，所以s就没有被使用，而带来的编译告警, 什么都没做，但是充当一次使用
//         int i = 0;
//         //if(*s == '\n') continue;
//         argv[i++] = strtok(str,SPG);
//         while((argv[i++] = strtok(NULL,SPG)) && i<ARGC-2) {}
//         //debugprint(argv);
//         // 子进程出现一定的问题导致导航提升也出现问题
//         pid_t id = fork();
//         assert(id>=0);
//         (void)id;
//         if(id == 0)
//         {
//             execv(argv[0], argv);
//             execvp(argv[0], argv);
//             printf("指令错误!\n");
//             exit(-1);
//         }
//         wait(NULL);
//     }
//     return 0;
// }


//实现小部分功能，但是不能切换文件夹!（cd功能失效）